﻿using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Windows.Input;
using CncConvProg.Model;
using CncConvProg.Model.FileManageUtility;
using CncConvProg.ViewModel.MainViewModel;
using CncConvProg.ViewModel.MVVM_Library;

namespace CncConvProg.ViewModel.Dialog
{
    public class CostiVariViewModel : ViewModelBase, IDialog
    {
        private CostoVarioViewModel _costoAggiuntivoSelezionato;
        public CostoVarioViewModel CostoAggiuntivoSelezionato
        {
            get { return _costoAggiuntivoSelezionato; }

            set
            {
                _costoAggiuntivoSelezionato = value;
                OnPropertyChanged("CostoAggiuntivoSelezionato");
            }
        }

        public ObservableCollection<CostoVarioViewModel> CostiAggiuntivi
        {
            get
            {
                var c = Singleton.Instance.GetCostiAggiuntivi();

                var d = new ObservableCollection<CostoVarioViewModel>();

                foreach (var costoAggiuntivo in c)
                {
                    d.Add(new CostoVarioViewModel(costoAggiuntivo));
                }

                return d;
            }
        }

        #region New Detail

        RelayCommand _addCostoVarioCmd;
        /// <summary>
        /// Salva modifiche database
        /// </summary>
        private void AddCostoVario()
        {
            var costoAggiuntivo = new CostoAggiuntivo
            {
                Descrizione = "<New>",
            };

            Singleton.Instance.AddCostoAggiuntivo(costoAggiuntivo);

            OnPropertyChanged("CostiAggiuntivi");

        }

        public ICommand AddCostoVarioCmd
        {
            get
            {
                return _addCostoVarioCmd ?? (_addCostoVarioCmd = new RelayCommand(param => AddCostoVario(),
                                                                            param => true));
            }
        }

        #endregion

        #region del datil

        private RelayCommand _delCostiVariDetCmd;

        private void CostiVariDeleteDetail(CostoVarioViewModel costiVariDetail)
        {
            var c = costiVariDetail.CostoAggiuntivo;

            Singleton.Instance.DeleteCostoAggiuntivo(c);
            
            OnPropertyChanged("CostiAggiuntivi");
        }

        public ICommand DelCostiVariDetailCmd
        {
            get
            {
                return _delCostiVariDetCmd ?? (_delCostiVariDetCmd = new RelayCommand(param => CostiVariDeleteDetail(param as CostoVarioViewModel),
                                                                            param => true));
            }
        }

        #endregion

        public void Save(IMainViewModel mainViewModel)
        {
            var mainscreen = mainViewModel as MainViewModel.MainViewModel;

            if (mainscreen != null)
            {
                mainscreen.UpdateMaterialSummary();
            }
        }

    }

    public class CostoVarioViewModel : ViewModelBase
    {
        public CostoAggiuntivo CostoAggiuntivo;
        public CostoVarioViewModel(CostoAggiuntivo costoAggiuntivo)
        {
            CostoAggiuntivo = costoAggiuntivo;
        }

        public string Descrizione
        {
            get { return CostoAggiuntivo.Descrizione; }

            set
            {
                CostoAggiuntivo.Descrizione = value;
                OnPropertyChanged("Descrizione");
            }
        }

        public double Importo
        {
            get { return CostoAggiuntivo.Importo; }

            set
            {
                CostoAggiuntivo.Importo = value;
                OnPropertyChanged("Importo");
            }
        }

        public bool IsImportoLotto
        {
            get { return CostoAggiuntivo.IsImportoStock; }
            set
            {
                CostoAggiuntivo.IsImportoStock = value;
                OnPropertyChanged("IsImportoLotto");
                OnPropertyChanged("IsImportoCad");
            }
        }
        public bool IsImportoCad
        {
            get { return !CostoAggiuntivo.IsImportoStock; }
            set
            {
                CostoAggiuntivo.IsImportoStock = !value;
                OnPropertyChanged("IsImportoCad");
                OnPropertyChanged("IsImportoLotto");
            }
        }
    }
}